AWS Glue DataBrewを使ってデータ内の機密情報をマスキングしてみる
どーもsutoです。
Glue DataBrewは、分析や機械学習のデータのETL処理などを行う際にコードを1つも書かずにデータクレンジングができるサーバーレスサービスです。
今回はこのDataBrewの機能を使ってデータセットからメールアドレスやクレジットカード情報のような機密情報を削除する処理をやってみようと思います。
検証する変換内容は以下です。
- 記号@の前にdummy_addressとしてメールIDをモックし、ドメイン名を保持します。
- 携帯電話番号の下8桁を1234-5678でモックします。
- CARD番号の最後の4桁のみを保持し、残りの番号を削除します。
- 電子メールと電話番号の列の名前をmock_emailとmock_phoneに変更します。
プロジェクトの作成
サンプルデータについて
今回は疑似個人情報データ生成サービスから以下のような擬似的なデータセット(xlsxファイル)を生成しました。
personal_info( id, name, gender, phone, mail, birth, card )
データセットはS3バケットにアップロードしたらDataBrewプロジェクトの作成に移ります。
AWSコンソールで「Glue DataBrew」から「プロジェクトを作成」をクリックしプロジェクトの作成を行います。
データソースはサンプルデータの保存先を選択します。(IAMロールは今回は新規作成とします)
以下のようにプロジェクト画面に遷移したら準備完了です。
データ変換
メールアドレスのmock
email列をクリックし、「クリーン」→「値またはパターンの置き換え」
以下のように正規表現を選択し、@以前の文字列を置き換える
電話番号をmock
メールアドレスと同様に、phone列をクリックし「値またはパターンの置き換え」、以下のように下8桁の番号を置き換えます
card列の下4桁の番号のみを保持する
クレジットカード番号の桁数はカード会社によって桁数が異なるため、列の最後の4桁を使用して新しい列を作成し、元のカード番号列を削除します。
card列をクリックし、「関数」→「右(RIGHT)」を選択
文字数:4、送信先列:card_4digitsと入力して新たに列を作成
card列をクリック→ナビゲーションドットをクリック→「削除」を選択してcard列を削除
emailとphoneの列の名前を変更
メールアドレスと電話番号がmockされていることを示すため列の名前を変更します
列を選択→ナビゲーションドットをクリック→名前変更を選択して、「phome⇨phone_mock」「email⇨email_mock」にそれぞれ変更
レシピを発行しジョブ実行
作成したレシピから「発行」をクリックしてレシピを保存する
左メニュー「レシピ」から先ほど保存したレシピを選択し「このレシピでジョブを作成する」をクリック
以下のようにジョブ名の入力、データセット選択、出力先のS3のパス、IAMロールを選択し「ジョブを作成し実行する」をクリック
ジョブ一覧から実行ステータスを確認できます。
まとめ
データ前処理などで、COUNTやSUMのような集計やワンホットエンコーディングのような前処理のほか、今回のような公開したくないデータのマスキングなどもまとめてGlue DataBrewでやれてしまうのは非常にラクだと思います。
コードを書かずに済むため、非エンジニアの方々でもDataBrewのGUIと操作に慣れてしまえば分析に必要なデータ加工ができるようになれるというメリットを得ることができますね。